home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / TinyGL / ami / content / ad709 / tinygl / src / arrays.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-15  |  2.5 KB  |  102 lines

  1. /*$T arrays.c GC 1.137 08/09/02 17:47:18 */
  2.  
  3. /*$6
  4.  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5.  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6.  */
  7.  
  8. #include "arrays.h"
  9.  
  10. /* */
  11.  
  12. void glopArrayElement(GLContext *c, GLParam *param) {
  13.     int i;
  14.     int states = c->client_states;
  15.     int idx = param[1].i;
  16.     /*~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  17.  
  18.     if(states & COLOR_ARRAY) {
  19.         GLParam p[5];
  20.         int        size = c->color_array_size;
  21.         i = idx * (size + c->color_array_stride);
  22.         p[1].f = c->color_array[i];
  23.         p[2].f = c->color_array[i + 1];
  24.         p[3].f = c->color_array[i + 2];
  25.         p[4].f = size > 3 ? c->color_array[i + 3] : 1.0f;
  26.         glopColor(c, p);
  27.     }
  28.  
  29.     if(states & NORMAL_ARRAY) {
  30.         i = idx * (3 + c->normal_array_stride);
  31.         c->current_normal.X = c->normal_array[i];
  32.         c->current_normal.Y = c->normal_array[i + 1];
  33.         c->current_normal.Z = c->normal_array[i + 2];
  34.         c->current_normal.Z = 0.0f;
  35.     }
  36.  
  37.     if(states & TEXCOORD_ARRAY) {
  38.         int size = c->texcoord_array_size;
  39.         i = idx * (size + c->texcoord_array_stride);
  40.         c->current_tex_coord.X = c->texcoord_array[i];
  41.         c->current_tex_coord.Y = c->texcoord_array[i + 1];
  42.         c->current_tex_coord.Z = size > 2 ? c->texcoord_array[i + 2] : 0.0f;
  43.         c->current_tex_coord.W = size > 3 ? c->texcoord_array[i + 3] : 1.0f;
  44.     }
  45.  
  46.     if(states & VERTEX_ARRAY) {
  47.         GLParam p[5];
  48.         int        size = c->vertex_array_size;
  49.         i = idx * (size + c->vertex_array_stride);
  50.         p[1].f = c->vertex_array[i];
  51.         p[2].f = c->vertex_array[i + 1];
  52.         p[3].f = size > 2 ? c->vertex_array[i + 2] : 0.0f;
  53.         p[4].f = size > 3 ? c->vertex_array[i + 3] : 1.0f;
  54.         glopVertex(c, p);
  55.     }
  56. }
  57.  
  58. /* */
  59. void glArrayElement(GLint i) {
  60.     GLParam p[2];
  61.     p[0].op = OP_ArrayElement;
  62.     p[1].i = i;
  63.     gl_add_op(p);
  64. }
  65.  
  66. /* */
  67. void glopEnableClientState(GLContext *c, GLParam *p) {
  68.     c->client_states |= p[1].i;
  69. }
  70.  
  71. /* */
  72. void glopDisableClientState(GLContext *c, GLParam *p) {
  73.     c->client_states &= p[1].i;
  74. }
  75.  
  76. /* */
  77. void glopVertexPointer(GLContext *c, GLParam *p) {
  78.     c->vertex_array_size = p[1].i;
  79.     c->vertex_array_stride = p[2].i;
  80.     c->vertex_array = p[3].p;
  81. }
  82.  
  83. /* */
  84. void glopColorPointer(GLContext *c, GLParam *p) {
  85.     c->color_array_size = p[1].i;
  86.     c->color_array_stride = p[2].i;
  87.     c->color_array = p[3].p;
  88. }
  89.  
  90. /* */
  91. void glopNormalPointer(GLContext *c, GLParam *p) {
  92.     c->normal_array_stride = p[1].i;
  93.     c->normal_array = p[2].p;
  94. }
  95.  
  96. /* */
  97. void glopTexCoordPointer(GLContext *c, GLParam *p) {
  98.     c->texcoord_array_size = p[1].i;
  99.     c->texcoord_array_stride = p[2].i;
  100.     c->texcoord_array = p[3].p;
  101. }
  102.